/**
 * 
 */
package info.sswap.ontologies.modularity;

import java.net.URI;

/**
 * Tries to resolve a term, i.e., looks up its definition.
 * The meaning of "definition" depends on the term:
 * class: all axioms where the term appears
 * property: data property or object property + domain/range + super properties
 * annotation property: just the declaration of the annotation property
 * 
 * Implementations of this interface may or may not provide any logical guarantees. 
 * In other words, this interface could be considered as a cheap alternative to module
 * extraction when the client just needs to know the definition of term but doesn't require 
 * completeness guarantees. 
 * 
 * @author Pavel Klinov
 *
 */
public interface TermResolver {

	/**
	 * Retrieves the definition for the term
	 * 
	 * @param term Logical URI of the term
	 * @param definedBy Physical URI of the ontology which defines it (could be null)
	 * @return
	 * @throws ModuleExtractionException
	 */
	public Module resolveTerm(URI term, URI definedBy) throws ModuleExtractionException;
}
